#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@author: Ruizhe Zhang
@time: 2025/3/9 22:27
@file: main.py
@describe: 根据当天的日期发送课表通知和天气信息到钉钉群
"""
import requests
import json
from datetime import datetime
from zhipuai import ZhipuAI

# 钉钉机器人的 Webhook URL
# 需要配置的地方：替换为你的钉钉机器人 Webhook URL
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=你的钉钉机器人WebhookToken'

# 请求头
headers = {'Content-Type': 'application/json'}

# 初始化智谱GLM-4-Flash客户端
# 需要配置的地方：替换为你的智谱GLM-4-Flash API密钥
GLM_API_KEY = "你的智谱GLM-4-Flash API密钥"
client = ZhipuAI(api_key=GLM_API_KEY)
model_name = "glm-4-flash"  # 模型名称

# 课表信息
# 根据你的课表输入课程、教室和时间参数，并且可以自定义增加其他参数。
schedule = {
    "星期一": {
        "上午": [
            {"课程": "智能传感器", "教室": "南校东平房107", "时间": "10:10-12:00"}
        ],
    },
    "星期二": {
        "上午": [
            {"课程": "工程伦理", "教室": "天仪楼116", "时间": "08:00-12:00"}
        ]
    },
    "星期三": {
        "上午": [
            {"课程": "误差分析与数据处理", "教室": "长庚楼407", "时间": "08:00-12:00"}
        ]
    },
    "星期四": {
        "下午": [
            {"课程": "思政", "教室": "天仪楼604", "时间": "14:00-15:50"}
        ]
    },
    "星期五": {
        "上午": [
            {"课程": "智能传感器", "教室": "南校东平房107", "时间": "14:00-15:50"}
        ]
    }
}

# 获取天气信息
def get_weather_data(province, place):
    """
    查询指定地点的天气信息
    """
    API_URL = "https://cn.apihz.cn/api/tianqi/tqybbaiducn.php"  # 新的天气API的URL
    # 需要配置的地方：替换为你的天气API用户ID和KEY
    # 接口盒子地址 可以在这里获取
    # https://www.apihz.cn/user/index.php 
    params = {
        "id": "你的天气API用户ID",#
        "key": "你的天气API用户KEY",
        "sheng": province,
        "place": place
    }
    response = requests.get(API_URL, params=params)
    if response.status_code == 200:
        data = response.json()
        print("API返回的数据：", data)  # 打印API返回的数据
        return data
    else:
        print("获取天气数据失败，状态码：", response.status_code)
        return None

# 获取当前日期是周几
chinese_today = ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期日"][datetime.now().weekday()]

# 获取今天的课表
today_schedule = schedule.get(chinese_today, {})

# 获取今天的天气信息
# 需要配置的地方：替换为你的查询地点
weather_data = get_weather_data("河北", "三河")  # 示例：查询河北三河的天气
if weather_data and weather_data.get("status") == 0:
    current_weather = weather_data["result"]["now"]
    forecast = weather_data["result"]["forecasts"][0]

    weather_summary = (
        f"当前天气：{current_weather['text']}, 温度：{current_weather['temp']}℃, 体感温度：{current_weather['feels_like']}℃, "
        f"湿度：{current_weather['rh']}%, 风力：{current_weather['wind_class']}, 风向：{current_weather['wind_dir']}\n"
        f"今日天气预报：白天 {forecast['text_day']}, 夜间 {forecast['text_night']}, 最高温度：{forecast['high']}℃, 最低温度：{forecast['low']}℃"
    )
else:
    weather_summary = "无法获取天气信息"

# 将课表信息和天气信息传递给大模型生成播报内容
if today_schedule:
    schedule_str = json.dumps(today_schedule, ensure_ascii=False)
    response = client.chat.completions.create(
        model=model_name,
        messages=[
            {"role": "system", "content": "根据提供的天气信息和课表信息生成总结，包括天气情况、课程名称、时间和教室位置。如果没有课，请输出'今日无课'。天气信息包含最高气温最低气温后可以再提供穿衣建议"},
            {"role": "user", "content": f"天气信息：{weather_summary}\n课表信息：{schedule_str}"}
        ]
    )
    summary = "大家早上好！今天是" + datetime.now().strftime("%Y/%m/%d") + " " + chinese_today + "\n" + response.choices[0].message.content
else:
    summary = f"今天是{chinese_today}，今日无课。\n{weather_summary}"

# 消息内容
text = {
    'msgtype': 'text',
    'text': {
        'content': summary  # 在消息内容中添加课表总结和天气信息
    },
    'at': {
        'isAtAll': False  # 是否@所有人
    }
}

# 发送 POST 请求
response = requests.post(url=webhook, headers=headers, data=json.dumps(text))

# 打印响应结果
print(response.status_code)
print(response.text)